Caso de estudio | Iflow

Fecha de publicación

24 de octubre de 2024

1 Introducción

En el marco del Primer Desafío Internacional de la Red Latinoamericana de Ciencia de Datos, este análisis tiene como propósito abordar un problema práctico del ámbito logístico. El proyecto promueve la colaboración entre estudiantes de diversas universidades latinoamericanas, fomentando el trabajo en equipo y la toma de decisiones basadas en datos reales.

El objeto de estudio es un conjunto de datos proporcionado por iFlow, una empresa argentina especializada en logística integral, con operaciones tanto nacionales como internacionales dentro del MERCOSUR. iFlow se dedica a la gestión y co-gerencia de cadenas de abastecimiento para sus clientes, buscando optimizar procesos y mejorar la eficiencia operativa.

Este análisis tiene como objetivo:

  1. Comprender y describir las principales características del conjunto de datos, que incluye registros de entregas realizadas en un período de tres meses.

  2. Identificar patrones y tendencias que permitan obtener insights relevantes sobre las operaciones de iFlow.

  3. Detectar posibles inconsistencias o errores en la base de datos, propias de un entorno operativo real, para evaluarlas e integrarlas al análisis.

2 Limpieza de datos.

La primera etapa de este análisis consistió en la limpieza de datos. Este proceso de limpieza fue clave para preparar los datos para un análisis exploratorio robusto y la generación de insights confiables sobre la operación logística de iFlow.

En primer lugar realizamos algunos cambios para facilitar el trabajo con los datos.

  • Tratar Columnas innecesarias

    La columna InicioVisitaPlanificado y FinVisitaPlanificado contienen los mismos valores por lo que las unificamos en una nueva columna.

  • Formatear correctamente las variables
  • Renombrar las columnas por nombres intuitivos.

Con estos cambios realizados pasamos a modificaciones y arreglos necesarios para un análisis correcto de los datos.

  • Eliminación de filas duplicadas.
  • Arreglo de coordenadas faltantes en algunas entregas.

    El dato de coordenadas en algunas filas estaba vacio o indicaba “0”. En algunos de estos casos pudimos rellenar estas coordenadas con datos existentes del domicilio (21 filas). En caso de que esto no sea posible las filas fueron eliminadas (19 filas) y no serán tomadas en cuenta para el análisis.

Por último creamos algunas nuevas columnas para distintos análisis. Entre estas algunas columnas para facilitar la interacción con fechas y horarios de entregas.

3 Vista general.

En esta sección ofrecemos una visión superficial de los datos, brindando un panorama inicial que permite familiarizarnos con su estructura y contenido.

Se registraron 27.419 entregas de dos clientes distintos: 16,545 del cliente 20 y 10.874 del cliente 70.

Todas estas entregas fueron realizadas entre el 3 de mayo y 8 de agosto de 2024, con un promedio de 9.005 entregas por mes

3.1 ¿Cuales son los horarios de entrega?

El dia con más entregas es el miercoles cerca de las 15:00

Vemos que el domingo hay solo 3 entregas. Esto podría deberse a un error por lo que las revisamos.

Orden Localidad Fecha y hora de entrega
81943 CAPITAL FEDERAL 2024-07-21 23:51:00
100968 CAPITAL FEDERAL 2024-07-21 23:51:00
100968 CAPITAL FEDERAL 2024-07-21 23:51:00

Al revisar estas entregas encontramos que las tres fueron entregadas a las 23:51. Esto podría deberse a un error en la carga de datos o a entregas especiales. Al ser las últimas entregas del día puede deberse a un cierre automático del sistema despues de haber dejado entregas inciadas el día anterior sin marcar su finalización.

Si bien este parece ser un caso puntual existen dos grandes problemas respecto a los horarios y duración de las entregas. Estos problemas son.

  1. Duración de las entregas: Muchas entregas tienen el mismo horario de inicio y fin. Esto puede deberse a errores en la carga de datos o a un sistema de carga poco eficiente.

  2. Entregas consecutivas: Muchas entregas consecutivas fueron cargadas con el horario de la entrega anterior. Esto dificulta la identificación de rutas, estimación de tiempos muertos y duraciones reales entre entregas.

3.2 Errores de carga en horarios de entrega.

Notamos que en las entregas muy cercanas geograficamente, en la misma cuadra, suelen tener el mismo horario de finalización. Esto se puede deber a que los operarios olvidan hacer la carga individual o consideran mas rapido completar ambas entregas antes de registrarlo en el sistema.

Junto con los errores de carga en los horarios de entrega este puede ser un segundo indicador de que el sistema de carga puede ser mejorado para no recolectar datos erroneos en el futuro.

Horarios cargados de forma incorrecta podrian causar:

  1. Mala estimación sobre tiempos muertos.
  2. Dificulta optimizar los procesos de entrega.
  3. Perjudica la proyección de horarios de entregas o ventanas horarias.

Algunas sugerencias e ideas para mejorar esto incluyen:

  • Mejoras de la interfaz en el sistema de carga para facilitar y fomentar su uso.

  • Implementación de un sistema de validación de los datos para evitar duplicados.

  • Desarrollo y uso de hardware específico para la carga de datos.

¿Cuál es el tiempo promedio entre el inicio y fin de las visitas de entrega?

Bien cargados 17142 vs mal cargados 10255 mal. Pero encontramos que son incluso más. Una forma de solucionarlo podría haber sido ordenar las entregas en orden cronologico e intentar estimar la duración real segun el tiempo entre las entregas y la distancia entre ellas pero al intentar esto encontramos que muchas entregas consecutivas arrastran errores. Dificultando la identificación de rutas, estimación de tiempos muertos y duraciones reales entre entregas.

Como referencia, el día 2024-06-27 16:06:00 hay 23 entregas graficadas el mismo día.

¿Que tan frecuente es este error? Muy frecuentes

Con 12799 entregas con horarios mal registrados representando un 46.67% los datos disponibles cargados de forma incorrecta.

Al desconfiar del 46.67% de los datos es dificil y poco preciso cualquier tipo de analisis sobre la eficiencia operativa de las entregas. Esto puede traer posibles problemas como:

  1. Problema 1
  2. Problema 2

Solucionar esta situacion representa una gran oportunidad y facilitaria exponencialmente el crecimiento de la empresa, precision de las ventanas de entrega, identificación de cuellos de botella reales y a final de cuentas la toma de decisiones operativas.

“Lo que no se mide, no se puede mejorar.” - Peter F. Drucker

A continuación listamos algunos posibles motivos y oportunidades para corregir la situación.

  1. Manual de uso y capacitación sobre el sistema UNIGIS

Basandonos en el Manual de transportistas - Elementos de seguridad y APPS encontramos la siguiente referencia sobre el uso de la aplicación.

Capacitar mejor al personal con mayor cantidad de recursos, claridad en los instructivos y videos demostrando el uso correcto del sistema videos demostrando el uso correcto del sistema mejoraría la precision de la carga de los datos en el futuro.

  1. Creación de una interfaz personalizada para Unigis.

El error de carga de horarios iguales en entregas consecutivas puede deberse principalmente a la dificultad de uso del sistema o poca practicidad del mismo por la que los transportistas podrían saltear los pasos del instructivo.

Si migrar a un nuevo sistema más moderno es una alternativa muy costosa podrían considerar hacer una inversión en desarrollo frontend para, utilizando la API del sistema actual, puedan tener una interfaz más amena a los transportistas.

Referencia del Uso de la API cloud de Unigis

Referencia del Uso de la API cloud de Unigis

El desarrollo de una interfaz personalizada para interactuar con su sistema actual podría ser una inversión considerable pero economica contrastando con la posibilidad de un desarrollo personalizado o la migración a un nuevo sistema.

Algunas consideraciones:

  • Inversión en equipo e investigación UX para asegurar el uso intuitivo de los transportistas. Es importante entender como es el uso del sistema en la practica.
  1. Migrar a un sistema más moderno o diseñar uno a medida para sus necesidades.

    Puede ser la opción mas costosa.

3.3 Información de bultos y peso.

¿Cuál es el promedio de bultos, peso y unidades entregadas por pedido?

En promedio cada entrega tiene:

  • 28.40 Unidades

  • 5.75 Bultos

  • Un peso de 41.15kg

porque dan con coma????????????????????????????

[1] 28.40304

[1] 5.756564

[1] 41.15846

3.4 Distribución geográfica de las entregas.

¿Cuál es la distribución de entregas por localidad o región?

Como podemos ver bla bla bla lbads

sadindiofnoidsfniosdfndsoinfdsionfsdionfdsoif

Para verlo de forma más resumida;

`summarise()` has grouped output by 'latitud'. You can override using the
`.groups` argument.

3.4.1 PENDIENTE Centro de distribución en Mendoza.

mostrar grafico, imagen de google maps y explicación.

¿Cuántas entregas se hicieron fuera del tiempo esperado o planificado?

`summarise()` has grouped output by 'mes'. You can override using the `.groups`
argument.

¿Qué clientes generan más volumen de entregas y cuáles presentan más problemas o irregularidades?

3.5 Conclusiones

4 Segmentación y patrones en entregas.

4.1 PENDIENTE Volumen y Distribución de Entregas

¿Cuántas entregas corresponden a cada cliente?

Identificar entregas recurrentes a domicilios,

`summarise()` has grouped output by 'cliente'. You can override using the
`.groups` argument.

Los domicilios reciben entregas de un único cliente o solo 20 o 70?

Total de ordenes con más de una entrega: 5027

¿Qué porcentaje de entregas se concentra en las localidades más activas?

zonas de entregas.

`summarise()` has grouped output by 'cluster'. You can override using the
`.groups` argument.

`summarise()` has grouped output by 'cluster'. You can override using the
`.groups` argument.

4.2 PENDIENTE Eficiencia y Rendimiento Operativo

¿Cuál es el tiempo promedio de entrega por cliente y por localidad?

¿Qué zonas presentan mayores retrasos o entregas fuera de tiempo?

Identifica áreas con posibles cuellos de botella logísticos.

¿Se detectan diferencias significativas en los tiempos de entrega según la cantidad de bultos o peso?

5 Análisis de series temporales

Tenemos 4 grandes caidas en las entregas por lo que buscamos identificar el motivo en cada fecha.

Fecha Cantidad de entregas Motivo
Jueves 9 de mayo 0 FNTC (Camioneros) adhiere al paro general del 9 de mayo*.
Jueves 20 de junio 138 Feriado nacional* Paso a la Inmortalidad del Gral. Manuel Belgrano
Domingo 21 de julio 3 Como explicamos anteriormente , según nuestros datos iflow no realizan entregas los domingos.
2 de agosto 11 Por simplicidad asumimos que se debe a falta de datos en la fecha de comparir el dataset.

Para realizar un pronóstico de demanda para el mes de agosto vamos no vamos a tomar en cuenta estos 4 casos asumiendolos como irrelevantes para el modelo. Limitando los datos hasta el 30 de julio

Con los datos ordenados ahora podemos descomponer la serie temporal en tendencia, estacionalidad y residuales.

Series: train_ts 
ARIMA(1,0,1) with non-zero mean 

Coefficients:
          ar1     ma1      mean
      -0.5190  0.7919  380.8660
s.e.   0.2562  0.1729    9.5105

sigma^2 = 3140:  log likelihood = -243.59
AIC=495.19   AICc=496.19   BIC=502.41
Series: train_ts 
ARIMA(1,1,1) 

Coefficients:
         ar1      ma1
      0.2272  -1.0000
s.e.  0.1542   0.0654

sigma^2 = 3337:  log likelihood = -241.57
AIC=489.14   AICc=489.74   BIC=494.5
Errores ARIMA(1,0,1):
 MAE: 37.44719 
 RMSE: 44.1846 
Errores ARIMA(1,1,1):
 MAE: 36.75162 
 RMSE: 43.85659 

6 Unidades de Transporte

En los datos proporcionados no contamos con la información necesaria para realizar un análisis específico de las unidades de transporte, ya que sería indispensable disponer de un identificador único para cada vehículo. Sin embargo, incluimos esta sección como prueba de concepto para demostrar el valor que podría generar este tipo de análisis en la operación logística. Disponer de esta información permitiría evaluar aspectos fundamentales de la gestión de la flota, optimización de rutas y eficiencia operativa.

A continuación, presentamos algunas preguntas clave que podrían responderse con un análisis detallado de las unidades de transporte:

6.1 Preguntas sobre Desempeño y Utilización de la Flota

  1. ¿Cuánto tiempo real dedica cada unidad a entregas versus tiempo muerto (espera, carga, mantenimiento)?

  2. ¿Cuáles son los tiempos de ruta promedio por camión y cómo varían según la región?

  3. ¿Es necesaria la cantidad actual de camiones, o existe capacidad ociosa que podría aprovecharse?

  4. ¿Hay rutas o zonas específicas donde sería más eficiente reducir o ampliar la flota?

  5. ¿Qué porcentaje de las unidades completan sus rutas dentro de los tiempos planificados?

6.1.0.1 Preguntas sobre Optimización de Rutas y Rendimiento

  1. ¿Se podrían consolidar entregas para reducir la cantidad de viajes sin afectar el servicio?

  2. ¿Existen unidades con rutas ineficientes que podrían optimizarse con ajustes?

  3. ¿Cuál es la relación entre la distancia recorrida y el volumen entregado por unidad?

  4. ¿Se podrían reducir tiempos muertos al mejorar la planificación de entregas o las ventanas horarias?

Si bien no contamos con la información completa sobre las unidades de transporte, hemos realizado estimaciones basadas en los datos disponibles y presentamos nuestro análisis como aproximación para obtener insights relevantes.

Ver las sedes de Iflow (que conocemos)

Graficar la primera entrega de cada día. Graficar la primera y segunda entrega de cada día. Esperariamos que estas entregas rodeen cada sede. Entender su comportamiento.

Primera y segunda entrega de cada día

Grafico de orden de las entregas de un día en específico.

Conclusiones:

  • Parece que los camiones no mezclan productos del cliente 20 y 70.

  • Tiempos muertos, identificar trayectorias por distancia.

  • Errores de carga cuando hay localidades consecutivas.

Grafico de trayectoria en orden para cada cliente. Identificar puntos que demuestran rutas poco eficientes. Cruces de lineas, tiempo perdido.

Graficar tiempo entre entregas por hora del día. (Tiempo muerto)

Ampliar u organizar nuevos centros de distribución. (En base a los datos de estos dos clientes), Segmentación de entregas (global y por cliente) para identificar puntos donde sería ideal. (Centro de zona, cruce de zonas, cluster con más o menor actividad)

6.2 Intentos de identificar transportistas.

A priori y para facilitar el análisis podríamos suponer que las entregas las realizan dos camiones. Uno para cada cliente. Podemos validar que esto es incorrecto al estudiar las entregas de un único cliente.

Vemos que entre la entrega 18 y 19 pasaron menos de 3min

Hay algunos casos donde podemos identificar camiones distintos:

  • Grandes distancias en poco tiempo.

  • Cruces de rutas.

Los cruces de trayectorias podrían indicar rutas ineficientes de los repartidores o que se estan siguiendo varios repartidores en la misma ruta. Podemos verlo de forma clara en el siguiente gráfico:

Habiendo identificado estas caracteristicas podríamos utilizar un modelo de agrupamiento para estimar distintos repartidores y sus trayectorias.

Esto tiene un gran valor para:

  1. Identificar rutas ineficientes.
  2. Estimar un tiempo de duración de cada entrega (Y rellenar vacios)
  3. Identificar patrones en los errores de carga de datos (Duración de entregas)

Para la aplicación practica de estos analisis sería vital tener acceso real a los camiones o repartidores responsables de cada entrega pero para el bien de este analisis intentamos aproximar lo más posible a estos datos utilizando modelos estadisticos. Esperamos sirva como prueba de concepto para evaluar el potencial de recolectar estos datos.

Esto nos presenta un problema que podría solucionarse con coloración de grafos.

Construir el grafo de conflictos:

  • Nodos: Cada nodo representa una entrega individual con su respectiva latitud, longitud, fecha y hora.

  • Aristas (conflictos): Se dibuja una arista entre dos entregas si es imposible que hayan sido realizadas por el mismo repartidor debido a restricciones de tiempo y distancia.

    • Criterio de conflicto: Para dos entregas AAA y BBB, se calcula el tiempo mínimo necesario para que un repartidor viaje desde la ubicación de AAA a BBB considerando una velocidad razonable (por ejemplo, la velocidad promedio de un vehículo en esa área).

    • Si el tiempo transcurrido entre la hora de entrega de AAA y BBB es menor que el tiempo mínimo de viaje calculado, entonces se establece un conflicto entre AAA y BBB.

Algoritmos sugeridos:

  • Algoritmo Greedy de coloreo: Un enfoque sencillo que asigna colores a los nodos de forma secuencial, utilizando el menor número de colores posible en cada paso.

  • Heurísticas avanzadas: Si el grafo es grande y complejo, pueden emplearse algoritmos como DSATUR o técnicas metaheurísticas (algoritmos genéticos, recocido simulado) para aproximar una solución cercana al mínimo número de colores.

Algunos resultados obtenidos utilizando el algoritmo Greedy de coloreo con python:

Si bien funciona correctamente para alrededor de 20 entregas a medida que agregamos datos se dificulta el algoritmo y considerando las incosistencias de los datos y errores de carga no sería adecuado estimar usando este algoritmo en su estado actual.

Algunas consideraciones.

  • Toma en cuenta una velocidad promedio de los camiones arbitraira

Si bien podría ser interesante utilizar un algoritmo para resolver o estimar el problema. Evidentmente la mejor solución es tomar los datos de UNIGIS o un software automatico. De todas formas no se podrá extraer valor real con datos de tiempo erroneos.

Esta estimación nos presenta algunas preguntas sobre factores de las entregas.

  1. Rutas optimizadas.

    Gracias al análisis podemos ver que las rutas estan optimizadas pero parecen estar diseñadas para transportistas individuales y no para la flota como grupo. Optimizar las rutas de entregas para toda la flota como un ente es distinto a diseñar la ruta para cada camion entre dos puntos.

7 Conclusiones

8 Apéndice

https://www.youtube.com/watch?v=V8eXoIFcMgM

Incluir enlace interno para versión del trabajo con el codigo y comentarios.

Incluir el enlace al repositorio de Github

Referencias de estudio sobre Lastmile logistics, ETL in logistics y clustering geoespacial DBSCAN, H3 oreilly